// package main    //声明文件所在的包，每个go文件都必须有归属的包

// import "fmt"   //引入程序中需要的包，为了使用包下的函数，例如：Println
// type A struct {
// 	a int
// 	b int
// }
// type B struct {
// 	c int
// 	A     //继承A
// }
// //区分：
// type C struct{
// 	c int
// 	a A
// }
// func main (){
// // 	//方式一：按顺序赋值
// // 	b := B{22,A{33,44}}
// // 	fmt.Println(b)
// // 	//方式二 ：对指定的字段赋值
// // 	b2 := B{
// // 		A:A{
// // 			a:22,
// // 			b:333,
// // 		},
// // 		c:666,
// // 	}
// // 	fmt.Println(b2)
// // }

package main    //声明文件所在的包，每个go文件都必须有归属的包

import "fmt"   //引入程序中需要的包，为了使用包下的函数，例如：Println

//构建一个名为Person的结构体，包含Name和Age两个字段，并且对Age进行封装（即通过方法来设置和获取这些字段的值）
//要求：1.对年龄设置值的时候进行判断，确保传入的年龄数据的正确性
		//2.编写工厂模式来初始化Person对象

type person struct{
	Name string
	age int
}
func NewPerson(name string,age int) *person{
	return &person{
		Name:name,
		Age:age,
	}
}

func (p *person)SetAge(age int){
	//0~100
	if age >= 0 && age <=100{
		p.Age = age	
	} else {
		fmt.Println("年龄不合理")
	}
}

func (p *Person)GetAge()int{
	return p.Age
}
func main(){
	p :=NewPerson("陈晓阳",23)
	fmt.Println(p.GetAge())
	p.SetAge(200)
	p.SetAge(2)
	fmt.Println(p.GetAge())

}